<?php

namespace app\services;

use think\facade\Db;
use utils\JwtAuth;

abstract class BaseServices
{
    protected $model = null; // 模型

    /**
     * 生成token
     * @param int $uid
     * @param array|null $user
     * @param string $type
     * @return string
     */
    public function createToken (int $uid, ?array $user = null, string $type = 'API')
    {
        /**
         * @var $jwt JwtAuth
         */
        $jwt = app()->make(JwtAuth::class);
        return $jwt->createToken($uid, $user, $type);
    }

    /**
     * 获取model
     * @param $name
     * @return mixed
     */
    public function getModel ($name)
    {
        return Db::name($name);
    }

    /**
     * 魔术方法（当调用该class不存在的方法是，则调用模型中的方法）
     * @param $name 被回调的函数（方法名）
     * @param $arguments 回调函数的参数
     * @return mixed
     */
    public function __call ($name, $arguments)
    {
        // TODO: Implement __call() method.
        return call_user_func_array([$this->model, $name], $arguments);
    }
}